package com.extraxue.singleton;

/*
 *  懒汉式
 *  只有当实例（单例）不存在的时候，才会初始化这个实例（单例）
 *  缺点，线程不安全(Mgr02),全局加锁导致效率降低（Mgr03）
 *  Mgr04:局部加synchronized锁，实际还是会导致线程不安全
 *  Mgr05:双重判断，相对比较完美了
 *  Mgr06:静态内部类（加载外部类时不会加载内部类，这样可以实现懒汉式，由JVM保证单例线程安全）
 */

public class Mgr06 {

    private static Mgr06 INSTANCE;

    private Mgr06(){

    }

    //静态内部类
    private static class Mgr06Holder{
        private final static Mgr06 INSTANCE = new Mgr06();
    }

    private static Mgr06 getInstance()  {
        return Mgr06Holder.INSTANCE;
    }

    public static void main(String[] args) {
        for (int i = 0 ; i < 100 ; i ++){
            //Lamda表达式 , 实现的是Runable接口，里面只有一个方法：run()，所以可以省略
            new Thread(() -> {
                System.out.println(Mgr06.getInstance().hashCode());
            }).start();
        }
    }

}
